package controller;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;
import javax.inject.Inject;
import javax.inject.Named;

import modelo.Celula;
import modelo.Equipe;
import service.CelulaService;
import service.EquipeService;

@Named
@ViewScoped
public class EquipeController implements Serializable {

	private static final long serialVersionUID = 259739922555659871L;
	
	private Equipe equipe;
	private Celula celula;
	private Long idCelulaSelecionada;
	private List<Equipe> listEquipe;

	@Inject
	private EquipeService equipeService;
	
	@Inject
	private CelulaService celulaService;
	

	public EquipeController() {

	}
	
	@PostConstruct
	public void init(){	
		pesquisarEquipes();
		equipe = new Equipe();
	}

	public String salvar() {
		try {
			this.equipe.setCelula(celulaService.recuperarPorId(idCelulaSelecionada));
			equipeService.persistir(equipe);
			equipe = new Equipe();
			addMessage("Equipe " + equipe.getNome() + " salva!");
		} catch (Exception e) {
			addMessage(e.getMessage());
		}
		
		return "cadastraEquipe";
	}
	
	public String editar() {
		try {
			equipeService.editar(equipe);
			equipe = new Equipe();
			addMessage("Equipe " + equipe.getNome() + " atualizada!");
		} catch (Exception e) {
			addMessage(e.getMessage());
		}
		
		return "cadastraEquipe";
	}
	
	public String excluir(){
		try {
			equipeService.remover(equipe);
			pesquisarEquipes();
			addMessage("Equipe " + equipe.getNome() + " excluida!");
		} catch (Exception e) {
			addMessage(e.getMessage());
		}
		return "consultaEquipe";
	}
	
	private void addMessage(String message) {
		FacesMessage msg = new FacesMessage(message);
		FacesContext.getCurrentInstance().addMessage(null, msg);
	}
	
	public List<SelectItem> getCelulas() {
		List<SelectItem> list = new ArrayList<SelectItem>();
		List<Celula> it = celulaService.recuperarTodos();
		for (int i = 0; i < it.size(); i++) {
			Celula celula = it.get(i);
			list.add(new SelectItem(celula.getIdCelula(), celula.getNrCelula()+""));
		}
		return list;
	}
	
	public List<Celula> getListaCelulas(){
		return celulaService.recuperarTodos();
	}
	
	/** GET E SET **/
	
	public void pesquisarEquipes(){
		setListEquipe(equipeService.recuperarTodos());
	}

	public Equipe getEquipe() {
		return equipe;
	}

	public void setEquipe(Equipe equipe) {
		this.equipe = equipe;
	}

	public List<Equipe> getListEquipe() {
		return listEquipe;
	}
	
	public void setListEquipe(List<Equipe> listEquipe) {
		this.listEquipe = listEquipe;
	}

	public Celula getCelula() {
		return celula;
	}

	public void setCelula(Celula celula) {
		this.celula = celula;
	}

	public Long getIdCelulaSelecionada() {
		return idCelulaSelecionada;
	}

	public void setIdCelulaSelecionada(Long idCelulaSelecionada) {
		this.idCelulaSelecionada = idCelulaSelecionada;
	}

}
